package cloud.seri.iot.common.api

import cloud.seri.iot.common.model.DeviceDTO
import cloud.seri.iot.common.model.QueryDeviceDTO
import cloud.seri.iot.common.model.RegisterDevice
import com.aliyuncs.iot.model.v20180120.*


interface DeviceManager
{

    /**
     * 注册设备
     *
     * @param pk         产品名称  必须
     * @param DeviceName            设备命名  非必须
     * @return 产品创建信息
     */
    fun registerDevice(dto: RegisterDevice): RegisterDeviceResponse?

    /**
     * 删除设备。
     *
     * @param pk       产品名称  非必须
     * @param DeviceName       设备的名称  非必须
     * @param IotId            设备ID    非必须
     * @return 产品创建信息
     */
    fun deleteDevice(dto: DeviceDTO): DeleteDeviceResponse?

    /**
     * 查询指定设备的详细信息
     *
     * @param IotId                 设备ID  非必须
     * @param pk            设备所隶属的产品Key。  非必须
     * @param DeviceName            设备名  非必须
     * @return 产品创建信息
     */
    fun queryDeviceDetail(dto: DeviceDTO): QueryDeviceDetailResponse?


    /**
     * 查询指定产品下的所有设备列表。
     *
     * @param pk         产品名称  必须
     * @param PageSize            设备命名  非必须
     * @param CurrentPage            设备命名  非必须
     * @return 产品创建信息
     */
    fun queryDevice(dto: QueryDeviceDTO): QueryDeviceResponse?

    /**
     * 批量注册多个设备
     *
     * @param pk       产品名称  必须
     * @param Count       设备的数量 必须
     *
     * @Des 描述：
     */
    fun batchRegisterDevice(pk: String, count: Int?): BatchRegisterDeviceResponse?


    /**
     * 在指定产品下批量自定义设备名称
     *
     * @param pk       产品名称  非必须
     * @param DeviceNames       设备的名称  非必须
     * 描述：
     * 该接口需要和BatchRegisterDeviceWithApplyId接口结合使用，实现在一个产品下批量注册（即新建）
     * 多个设备，并且为每个设备单独命名。单次调用，最多能传入1,000 个设备名称。
     */
    fun batchCheckDeviceNames(pk: String, DeviceNames: List<String>): BatchCheckDeviceNamesResponse?


    /**
     * 根据申请批次ID（ApplyId）批量注册设备
     *
     * @param pk       产品名称  必须
     * @param ApplyId       要批量注册的设备的申请批次ID。申请批次ID由调用BatchCheckDeviceNames接口返回。  必须
     *
     * @Des 描述：
     * 该接口需要和BatchCheckDeviceNames接口结合使用，实现在一个产品下批量注册（即新建）多个设备，并且为每个设备单独命名。
     */
    fun batchRegisterDeviceWithApplyId(pk: String, ApplyId: Long?): BatchRegisterDeviceWithApplyIdResponse?


    /**
     * 查询批量注册设备申请的处理状态和结果
     *
     * @param pk       产品名称  必须
     * @param ApplyId       设备的数量 必须
     *
     * @Des 描述：
     */
    fun queryBatchRegisterDeviceStatus(pk: String, ApplyId: Long?): QueryBatchRegisterDeviceStatusResponse?


    /**
     * 查询批量注册的设备信息
     *
     * @param ApplyId       产品名称  必须
     * @param PageSize         必须
     * @param CurrentPage             必须
     *
     * @Des 描述：
     */
    fun queryPageByApplyId(ApplyId: Long?, PageSize: Int?, CurrentPage: Int?): QueryPageByApplyIdResponse?


    /**
     * 查询指定产品下的设备统计数据
     *
     * @param pk 设备所隶属的产品Key
     *
     * @Des 描述：
     */
    fun queryDeviceStatistics(pk: String): QueryDeviceStatisticsResponse?


    /********************************操作设备***************************/

    /**
     * 查看指定设备的运行状态
     *
     * @param pk       产品名称  非必须
     * @param DeviceName       设备的名称  非必须
     * @param IotId            设备ID    非必须
     * @return 产品创建信息
     */
    fun getDeviceStatus(pk: String, DeviceName: String?, IotId: String?): GetDeviceStatusResponse?


    /**
     * 批量查看指定设备的运行状态
     *
     * @param pk       产品名称  非必须
     * @param DeviceNames       设备的名称  非必须
     * @return 产品创建信息
     */
    fun batchGetDeviceState(pk: String, DeviceNames: List<String>): BatchGetDeviceStateResponse?


    /**
     * 禁用指定设备
     *
     * @param IotId       设备的名称  非必须
     * @param pk       产品名称  非必须
     * @param DeviceName       设备的名称  非必须
     * @return 产品创建信息
     */
    fun disableThing(dto: DeviceDTO): DisableThingResponse?

    /**
     * 启用指定设备
     *
     * @param IotId       设备的名称  非必须
     * @param pk       产品名称  非必须
     * @param DeviceName       设备的名称  非必须
     * @return 产品创建信息
     */
    fun enableThing(dto: DeviceDTO): EnableThingResponse?

}

